package com.sbp.message.api.service;

import java.util.List;
import java.util.Map;

import com.dap.dao.model.Page;
import com.sbp.message.api.entity.Message;
import com.sbp.message.api.entity.MessageStatus;
import com.sbp.message.api.entity.MessageVO;

public interface MessageService {
	/**持久化消息到数据库，消息状态待确认. 外部接口, 不要修改方法名**/
	Message createMessage(Message message);
	/**存储消息到数据库，同时发送该条消息**/
	Message createAndSendMessage(Message message);
	/**查询消息**/
	Message queryMessage(String msgId);
	/** 仅仅修改消息状态 **/
	int updateMessageStatus(String messageId, MessageStatus messageStatus, String errorMessage, String errorLog);
	/** 消息执行成功之后, 修改消息状态(如果消费完, 修改为成功) **/
	int tryEndMessageWithConsumeSucceed(Message message, String appName);
	/** 消息执行业务失败之后, 修改消息状态(如果消费完, 修改为成功) **/
	int tryEndMessageWithBusinessFailed(Message message, String appName, String errorMessage, String errorLog);
	/**修改消息消费者数量,消息消费者启动时调用该接口**/
	int updateTopicRegistry(String topic, String appName);

	int updateMessageContent(String msgId, String msgContent);
	
	/**结束掉该条消息生命周期**/
	boolean killMessage(String msgId);
	
	boolean closeMessage(String msgId);
	/**重新激活该条消息**/
	boolean reliveMessage(String msgId);
	/**重新激活并发送该条消息**/
	boolean reliveAndSendMessage(String msgId);
	/**发送消息到broker，修改数据库消息状态待发送. 外部接口, 不要修改方法名 **/
	Message confirmAndSendMessage(Message message);
	/**确认保存并发送消息**/
	Message confirmAndSendMessage(String msgId);
	/**确认保存发送消息列表**/
	int confirmAndSendMessages(List<Message> msgList);
	/**批量发送消息**/
	int confirmAndSendMessagesById(List<String> msgIdList);
	/**通过id发送消息**/
	Message sendMessage(String msgId);
	Message sendMessage(Message msg);
	/**发送消息列表**/
	int sendMessages(List<Message> msgList);
	/**通过id发送消息**/
	int sendMessagesById(List<String> msgIdList);
	/**移除消息**/
	int removeMessages(List<String> msgIdList);

	Page<Message> queryMessagePage(Map<String, Object> parameter, Integer pageIndex, Integer pageSize);
	Page<MessageVO> queryMessageVOPage(Map<String, Object> parameter, Integer pageIndex, Integer pageSize);
	Page<Message> findUnconsumedMessage(Integer pageIndex, Integer pageSize);
	List<String> findUnconsumedMessageId(Integer pageIndex, Integer pageSize);
	
}
